package 多态.instrumentExample;

public class CreateConstructor {
	public static void main(String[] args) {
		// 我们本以为会打印出来5，但是打印出来的却是0
		// 1. 在所有的事情发生前，将分配给对象的存储空间，初始化成为二进制的零。
		// 2. 因为Dog初始化之前会先找到Animal
		// 3. 在Animal中执行构造方法，并且创建成功，才会调用Dog的构造方法，但是在调用Animal的say方法的时候，因为say方法已经被Override了，所以Dog中的say被调用。
		// 注意：被重写之后，要想调用，因为存在两个域，所以必须显式的使用 super.** 来调用
		//
		new Dog(5);
	}
}

class Animal {
	void say() {
		System.out.println("say animal");
	}

	public Animal() {
		System.out.println("before say");
		say();
		System.out.println("after say");
	}
}

class Dog extends Animal {
	private int age = 1;

	public Dog(int n) {
		age = n;
		System.out.println("Dog say age is :" + age);
		say();
	}

	@Override
	void say() {
		System.out.println("dog say name is :" + age);
	}
}
